#include<iostream>
#include<signal.h>
#include<unistd.h>
//总结：信号捕捉和信号退出测试
using namespace std;

//3.验证父进程不等子进程，让子进程成为僵尸进程
// int main()
// {
//     signal(SIGCHLD,SIG_IGN);//设置忽略子进程

//     if(fork()==0)
//     {
//         cout<<"child:"<<getpid()<<endl;
//         sleep(5);
//         exit(0);
//     }

//     while(true)
//     {
//         cout<<"parent:"<<getpid()<<"执行父进程的任务"<<endl;
//         sleep(1);
//     }
//     return 0;
// }

//2.验证父子进程汇中，子进程退出向父进程发送信号SIGCHLD-17
// void handle(int signum)
// {
//     cout<<"子进程退出："<<signum<<endl;
// }

// int main()
// {
//     signal(SIGCHLD,handle);
//     if(fork()==0)
//     {
//         sleep(1);
//         exit(0);
//     }
    
//     while(true) sleep(1);

//     return 0;
    
// }

//1.使用sigaction进行信号捕捉
//定义第二个参数的回调函数
// void handler(int signum)
// {
//     cout<<"获取了一个信号："<<signum<<endl;
// }
// int main()
// {
//     //定义函数的2，3参数,并设置结构体内部的参数
//     struct sigation act,oact;
//     act.sa_flags =0;
//     sigemptyset(&act.sa_mask);
//     act.sa_handler = handler;

//     sigaction(2,&act,&oact);

//     cout<<"default action :"<<(int)oact.sa_handler<<endl;//拿到默认的处理方法

//     //持续捕捉信号，防止程序退出
//     while(true) sleep(1);
// }
